"""
函数的传递
    1. 函数的 返回值 可以作为 另一个函数的 参数传递
    2. 函数本身 可以作为 另一个 函数的参数 传递
"""

# 演示 1. 函数的返回值作为参数 传递给另一个函数
def fun1():
    return 100

def fun2(num):
    print(f'num={num}')

# a = fun1()  # 100
# fun2(a)

# 合并版
fun2(fun1()) # 函数作为另一个函数的参数进行传递
fun2(fun1) #直接写函数名，是函数对象 num=<function fun1 at 0x0000018D49B51300>

print('-' * 20)

# 演示 直接写函数名，是函数对象
def get_sum(a,b):
    return a + b

sum = get_sum(10,20) # 30
print(sum)

hg = get_sum # 将函数get_sum这个对象赋值给了hg 地址

sum2 = hg(15,32) # 因为hg指向的是get_sum这个函数对象，所以此处调用的就是 get_sum这个方法
print(sum2)

print('=' * 30)

# 演示二 函数本身可以作为另一个函数的参数进行传递

def get_substract(a,b):
    return a - b

def calculate(a,b,fn):
    """
    自定义的函数，进行算数运算，传入的是加法，就进行加法运算，传入的是减法就进行减法运算
    :param a: 第一个整数
    :param b:  第二个整数
    :param fn:  传入的计算方式 加法 或者减法
    :return: 返回 计算结果
    """
    return fn(a,b)

# 计算加法
sum3 = calculate(100,200,get_sum)
print(sum3)

# 计算减法
sub = calculate(200,100,get_substract)
print(sub)


